#include "proc_eth.h"


void proc_eth(Eth_Service *pEthServ, B1553_BusService *pBusServ, u32 current_mode)
{
    u32 foo = 0;
    u32 rxDataLen = 0;
    if (0 == pEthServ->rx_flag) // 无数据 函数返回
    {
        return;
    }

    if (current_mode == SYS_MODE_WORK) // 工作模式 不处理
    {
        XLlFifo_RxReset(pEthServ->Fifo_InstancePtr);
        --pEthServ->rx_flag;
        return;
    }

    // 其他模式正常处理接收数据
    eth_FifoRecvData(pEthServ);
    --pEthServ->rx_flag;

    u8 RxData[539] = {0};
    foo = parse_Rxpacket(pEthServ, RxData, &rxDataLen);

    // 处理完ICMP包 返回
    if (foo == ETH_FRAME_ICMPV6)
    {
        B1553_TMadd_Comm_Eth_TX_Count(pBusServ); // 遥测+1
        return;
    }

    if (foo == ETH_FRAME_UDP) // 处理UDP包
    {
        // dbg_print(pRxData, rxDataLen); // 调试口输出
        uart_rs01_send(RxData, rxDataLen);
        ++pEthServ->update_expect_cnt;              // 预期接收计数+1
        B1553_TMadd_Comm_Update_Count(pBusServ); // 接收计数+1

        if (pEthServ->update_expect_cnt < 256) // 一个扇区128K字节 256包数据每包512字节
        {
            B1553_TMset_Update_stat(pBusServ, PROGRAM_UPDATING); // 设置正在更新的标志
        }
        else
        {
            B1553_TMset_Update_stat(pBusServ, PROGRAM_UPDATE_DONE); // 测试用 更新完成
            pEthServ->update_expect_cnt = 0;
            uart_rs01_sendTM(); //  发送遥测
            uart_rs01_rcvTM();
        }
        return;
    }

    // 其他错误 更新遥测
    if (foo != 0)
    {
        B1553_TMset_Update_stat(pBusServ, foo);
    }

    return;
}